package com.sky.controller.user;

import com.sky.context.BaseContext;
import com.sky.dto.OrdersCancelDTO;
import com.sky.dto.OrdersPageQueryDTO;
import com.sky.dto.OrdersPaymentDTO;
import com.sky.dto.OrdersSubmitDTO;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.OrderService;
import com.sky.vo.OrderPaymentVO;
import com.sky.vo.OrderSubmitVO;
import com.sky.vo.OrderVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController(value = "UserOrderController")
@Slf4j
@Api(tags = "用户订单的相关接口")
@RequestMapping("/user/order")
public class OrderController {

       @Autowired
       OrderService orderService;

       @PostMapping("submit")
       @ApiOperation("用户下单")
       public Result<OrderSubmitVO> submit(@RequestBody OrdersSubmitDTO ordersSubmitDTO) {
              log.info("用户下单信息:{}", ordersSubmitDTO);
              OrderSubmitVO orderSubmitVo=orderService.submit(ordersSubmitDTO);
              return Result.success(orderSubmitVo);
       }

       /**
        * 订单支付
        * @param ordersPaymentDTO
        * @return
        */
       @PutMapping("/payment")
       @ApiOperation("订单支付")
       public Result<OrderPaymentVO> payment(@RequestBody OrdersPaymentDTO ordersPaymentDTO) throws Exception {
              log.info("订单支付：{}", ordersPaymentDTO);
              OrderPaymentVO orderPaymentVO = orderService.payment(ordersPaymentDTO);
              log.info("生成预支付交易单：{}", orderPaymentVO);
              return Result.success(orderPaymentVO);
       }
       /**
        *用户催单
        * @param id
        * @return
        */
       @GetMapping("reminder/{id}")
       @ApiOperation("用户催单")
       public Result reminder(@PathVariable Long id) {
              log.info("订单id：{}",id);
              orderService.reminder(id);
              return Result.success();
       }

       /**
        * 查看历史订单
        * @return
        */
       @GetMapping("/historyOrders")
       @ApiOperation("查看历史订单")
       public Result<PageResult> historyOrders(@RequestParam String page,
                                               @RequestParam String pageSize,
                                               @RequestParam String status
       ) {
              log.info("查看历史订单");
              OrdersPageQueryDTO ordersPageQueryDTO=new OrdersPageQueryDTO();
              ordersPageQueryDTO.setPageSize(Integer.parseInt(pageSize));
              ordersPageQueryDTO.setPage(Integer.parseInt(page));
              if(status!=""){
                     ordersPageQueryDTO.setStatus(Integer.valueOf(status));
              }
              ordersPageQueryDTO.setUserId(BaseContext.getCurrentId());
              PageResult pageResult=orderService.historyOrders(ordersPageQueryDTO);
              return Result.success(pageResult);
       }

       /**
        * 查询订单详情
        * @param id
        * @return
        */
       @GetMapping("orderDetail/{id}")
       @ApiOperation("查询订单详情")
       public Result<OrderVO> orderDetail(@PathVariable Long id) {
              log.info("查询详情的订单号:{}",id);
              OrderVO details = orderService.details(id);
              return Result.success(details);
       }


       /**
        * 取消订单
        * @param id
        * @return
        */
       @PutMapping("cancel/{id}")
       @ApiOperation("取消订单")
       public Result cancelOrder(@PathVariable Long id) {
              log.info("取消的订单id:{}",id);
              OrdersCancelDTO ordersCancelDTO=new OrdersCancelDTO();
              ordersCancelDTO.setId(id);
              orderService.cancle(ordersCancelDTO);
              return Result.success();
       }

       /**
        * 再来一单
        * @param id
        * @return
        */
       @PostMapping("repetition/{id}")
       @ApiOperation("再来一单")
       public Result repetition(@PathVariable Long id) {
              log.info("再来一单的订单id:{}",id);
              orderService.repetition(id);
              return Result.success();
       }



}
